export function formatDate (date, fmt) {
  if (typeof date === 'string') {
    date = date.replace(/\-/g, '/')
  }
  date = new Date(date)
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  const o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (const k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      const str = o[k] + ''
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
    }
  }
  return fmt
}

function padLeftZero (str) {
  return ('00' + str).substr(str.length)
}

export function translateDataToTree (data) {
  const parent = data.filter(
    (value) => value.parentId === 'undefined' || value.parentId == null
  )
  const children = data.filter(
    (value) => value.parentId !== 'undefined' && value.parentId != null
  )
  const translator = (parent, children) => {
    parent.forEach((parent) => {
      children.forEach((current, index) => {
        if (current.parentId === parent.id) {
          const temp = JSON.parse(JSON.stringify(children))
          temp.splice(index, 1)
          translator([current], temp)
          typeof parent.children !== 'undefined'
            ? parent.children.push(current)
            : (parent.children = [current])
        }
      })
    })
  }
  translator(parent, children)
  return parent
}

/**
 * @description 树形结构数据转换成父子关系的数组
 * @param data
 * @returns {[]}
 */
export function translateTreeToData (data, children) {
  const result = []
  data.forEach((item) => {
    const loop = (data) => {
      result.push({
        id: data.id,
        name: data.name,
        parentId: data.parentId
      })
      const child = data[children]
      if (child) {
        for (let i = 0; i < child.length; i++) {
          loop(child[i])
        }
      }
    }
    loop(item)
  })
  return result
}

// 寻找从属关系公共方法
export function regroupCascaderData (
  id, // 要寻找的唯一值
  data, // 列表总数据
  key = 'label', // 列表总数据 的key
  val = 'value', // 列表总数据 的value
  list = 'children' // 列表总数据 下属关系的key
) {
  let _allObj = {}
  const _allArr = []
  const setData = function (data) {
    let Obj
    for (const item of data) {
      Obj = {
        [key]: item[key],
        [val]: item[val]
      }
      if (item[val] == id) {
        Obj.isOk = true // 如果条件符合，接下来就不会再判断
        return Obj
      } else if (item[list] && item[list].length) {
        Obj[list] = setData(item[list])
        if (Obj[list] && Obj[list].isOk) {
          Obj.isOk = true
          return Obj
        }
      } else {
        Obj = null
      }
    }
    return Obj
  }
  const getObjData = function (data) {
    if (data) {
      // 递归向数组中填充数据
      _allArr.push(data[val])
      if (data[list]) {
        getObjData(data[list])
      }
    }
  }
  _allObj = setData(data)
  getObjData(_allObj)
  return {
    Obj: _allObj,
    arr: _allArr
  }
}
